﻿#define  MainFile
#include "Common.h"


//*******************未加密上传的文件test22.c**dddd**********************
//********************************************************* 函 数 声 明
void TA_vShowMenu(void);
void TA_vCardTestMenu(void);
void TA_vCommunicationTestMenu(void);
void TA_vMemoryTestMenu(void);
void TA_OthersTestMenu(void);
void TA_vSetStop(void);
void TA_vModemX900(void);
void TA_ucPowerMenu(void);
void TA_vUSBHostTest(void);
uchar TI_ucGetProduct(void);

#ifdef M36
extern EI_vInitExportTable(void);
#endif

#ifdef EPTAND
void TA_vMdlMain(void)
#elif defined MPAY
int UserMain(void)
#else
int main(int arc, char **argv)
#endif                          // EPTAND
{

#ifdef MPAY
    setlocale(LC_ALL, "C");
    EI_vInitExportTable();
#endif

    ET_ucLoadCommLib();
    ET_vWriteLogToAPlatform("Load end");
#if defined EPTA9LQT || defined EPTAND
    EA_ucMfsCreate((uchar *) "EPT_Super", (uchar *) MAC_MOUDLE_NAME, 0600,
                   sizeof(TI_NORMALDATA));
    ET_vWriteLogToAPlatform("EA_ucMfsCreate");
#endif

#ifdef EPTAND
    EA_vSetPrinterCallback(msg_callback);

    ET_iCommLibInit(MAC_MOUDLE_NAME, &gtNormalData, 0, 0,
                    (void *) TA_vShowMenu);
#elif defined MPAY
    return ET_iCommLibInitEx(MAC_MOUDLE_NAME, &gtNormalData,
                             sizeof(gtNormalData), 0, 0, (void *) TA_vShowMenu);
#else
    return ET_iCommLibInit(MAC_MOUDLE_NAME, &gtNormalData, arc, argv,
                           (void *) TA_vShowMenu);
#endif // EPTAND
}

/**********************************************************************
* 函数名称: TA_vShowMenu
*   
* 功能描述: 显示主菜单
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linw        2013-08-22      1.00                创建
**********************************************************************/
void TA_vShowMenu(void)
{
    // ET_vWriteLogToAPlatform("TA_vShowMenu...");
//     MENU menu[] = {
//         {"设置节能", TA_vSetStop},
//         {"卡类测试", TA_vCardTestMenu},
//         {"通讯类测试", TA_vCommunicationTestMenu},
//         {"存储器测试", TA_vMemoryTestMenu},
//         {"其它系统模块", TA_OthersTestMenu},
//     };

#if defined EPTM3 || defined M36
    ET_ConfigInfo tConfig;
#endif

#ifndef MPAY
    MENU menu[8];
#else
    MENU menu[5];
#endif
    strcpy(menu[0].FunName, "设置节能");
    strcpy(menu[1].FunName, "卡类测试");
    strcpy(menu[2].FunName, "通讯类测试");
    strcpy(menu[3].FunName, "存储器测试");
    strcpy(menu[4].FunName, "其它系统模块");
#ifndef MPAY
    strcpy(menu[5].FunName, "打印测试");
    strcpy(menu[6].FunName, "扫描测试");
    strcpy(menu[7].FunName, "射像头测试");
#endif

    menu[0].ExecFun = TA_vSetStop;
    menu[1].ExecFun = TA_vCardTestMenu;
    menu[2].ExecFun = TA_vCommunicationTestMenu;
    menu[3].ExecFun = TA_vMemoryTest;
    menu[4].ExecFun = TA_OthersTestMenu;

#ifndef MPAY
    menu[5].ExecFun = TA_vPrintTestMenu;
    menu[6].ExecFun = (void *) TA_ucScanMenu;
    menu[7].ExecFun = TA_vCameraTest;
#endif


#ifdef EPTA9L
#ifndef EPTA9LQT
    EA_iSetMode(0);             // 增加此句为了彩色屏幕机器显示好字体正常
#endif
#endif

#ifdef EPTAND
    TA_ucInitScanEnv();
#endif

    memset(&tGloabData, 0x00, sizeof(GLOABDATA));
    TI_ucGetProduct();          // 获取打印机型
#if defined EPTM3 || defined M36
    TP_vGetPrintInfo(&tConfig); // 获取打印机芯信息
    if (tConfig.cDriverIndex == '7')
    {
        tGloabData.ucPrtMovement = TM_PRTB192;
        tGloabData.ucIfPRT192Movement = ET_YES;
    }
    else
    {
        tGloabData.ucPrtMovement = TM_LTPZ245;
        tGloabData.ucIfPRT192Movement = ET_NO;
    }
#endif

    //  tGloabData.gucScanType = SCAN_TYPE_BARCODE; // 默认是条码

    if (EA_ucCreateTimer(&gTimeHandle) != EM_SUCCESS)
    {
        ET_vDisplay(2, "创建定时器失败");
        ET_uiInkey(0);
    }

#ifdef EPTM3
    while (1)
    {
#endif
        ET_ucLoadMenu(menu, (char *) "硬件测试", sizeof(menu) / sizeof(MENU),
                      ET_MENUITEM);
#ifdef EPTM3
    }
#endif
}

/**********************************************************************
* 函数名称: TA_vSetStop
*   
* 功能描述: 设置是否进入节能
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   liyc        2014-05-29      1.00                创建
**********************************************************************/
void TA_vSetStop(void)
{
    uint uiKey;

    ET_vDisplay(2, "设置节能");
    ET_vDisplay(3, "#0.允许节能");
    ET_vDisplay(4, "1.不允许节能");
    uiKey = ET_uiInkey(0);
    if (uiKey == '1')
        TI_ucSetStopFlag(EM_DISABLE_STOP);
    else
        TI_ucSetStopFlag(EM_ENABLE_STOP);

}


/**********************************************************************
* 函数名称: TA_vCardTestMenu
*   
* 功能描述: 卡类测试菜单
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linh        2013-09-03      1.00                创建
**********************************************************************/
// void TA_vCardTestMenu(void)
// {
//     MENU menu[] = {
//         {"SAM测试", TA_vSamTest},
//         {"E09M全埋IC卡测试", TA_vMenuItemE09MTest},
//     };
//     ET_ucLoadMenu(menu, (char *) "卡类测试", sizeof(menu) / sizeof(MENU),
//                   ET_MENUITEM);
// }
void TA_vCardTestMenu(void)
{
    MENU menu[6];
    strcpy(menu[0].FunName, "磁卡刷卡成功率");  // add by liyc 
    strcpy(menu[1].FunName, "IC/SAM卡信号测试");    // add by liyc 
    strcpy(menu[2].FunName, "IC卡插卡成功率测试");  // add by liyc 
    strcpy(menu[3].FunName, "IC卡I/O口输入输出电流测试");   // add by liyc 
    strcpy(menu[4].FunName, "SAM测试");
#ifdef EPTA9L
    strcpy(menu[5].FunName, "E09M全埋IC卡测试");
#endif

    menu[0].ExecFun = TI_vMagSuccRate;
    menu[1].ExecFun = TA_vCardSignalTest;
    menu[2].ExecFun = TA_vCardInRate;
    menu[3].ExecFun = TA_vICIOTest;
    menu[4].ExecFun = TA_vSamTest;
#ifdef EPTA9L
    menu[5].ExecFun = TA_vMenuItemE09MTest;
#endif


    ET_ucLoadMenu(menu, (char *) "卡类测试", sizeof(menu) / sizeof(MENU),
                  ET_MENUITEM);
}

void TA_vUSBHostTest(void)
{
    ET_vDisplay(2, "请用开发人员提供的程序测试");
    ET_uiInkey(0);
}

/**********************************************************************
* 函数名称: TA_vCommunicationTestMenu
*   
* 功能描述: 通讯类测试菜单
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linh        2013-09-03      1.00                创建
**********************************************************************/
void TA_vCommunicationTestMenu(void)
{
//     MENU menu[] = {
//      {"ETH/网口百米长线测试", TA_vEthTest},
//         {"USB测试", TA_vUsbTest},

#ifndef MPAY
    MENU menu[7];
#else
    MENU menu[2];
#endif
    strcpy(menu[0].FunName, "USB测试");
    strcpy(menu[1].FunName, "USB2.0_Host测试");
#ifndef MPAY
    strcpy(menu[2].FunName, "串口测试");
    strcpy(menu[3].FunName, "MODEM x900测试");
    strcpy(menu[4].FunName, "MODEM同步");
    strcpy(menu[5].FunName, "ETH/网口百米长线测试");
    strcpy(menu[6].FunName, "以太网10Base-T/100Base-T口测试");
#endif

    menu[0].ExecFun = TA_vUsbTest;
    menu[1].ExecFun = TA_vUSBHostTest;
#ifndef MPAY
    menu[2].ExecFun = TA_vRS232Test;
    menu[3].ExecFun = TA_vModemX900;
    menu[4].ExecFun = (void *) TA_ucModemSync;
    menu[5].ExecFun = TA_vEthTest;
    menu[6].ExecFun = TA_vEth10BaseTest;
#endif


    ET_ucLoadMenu(menu, (char *) "通讯类测试", sizeof(menu) / sizeof(MENU),
                  ET_MENUITEM);
}

/**********************************************************************
* 函数名称: TA_vMemoryTestMenu
*   
* 功能描述: 存储器测试菜单
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linh        2013-09-03      1.00                创建
**********************************************************************/
// void TA_vMemoryTestMenu(void)
// {
//     MENU menu[] = {
//         {"存储器测试", TA_vMemoryTest},
//     };
//     ET_ucLoadMenu(menu, (char *) "存储器测试", sizeof(menu) / sizeof(MENU),
//                   ET_MENUITEM);
// 
// }

/**********************************************************************
* 函数名称: TA_OthersTestMenu
*   
* 功能描述: 其它系统模块测试菜单
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linh        2013-09-03      1.00                创建
**********************************************************************/
void TA_OthersTestMenu(void)
{
//     MENU menu[] = {
//         {"蜂鸣器测试", TA_vBeepTest},
// #ifdef EPTA9L
//         {"电源测试", TA_vPowerTest},
// #endif
//     };

    MENU menu[5];
    strcpy(menu[0].FunName, "蜂鸣器测试");
    strcpy(menu[1].FunName, "LCD测试"); // add by liyc 
    strcpy(menu[2].FunName, "按键测试");    // add by liyc 
    strcpy(menu[3].FunName, "电源测试");    // add by liyc 
     strcpy(menu[4].FunName, "签名版");    // add by liyc 

// #ifdef EPTA9L
//     strcpy(menu[5].FunName, "电源测试");
// #endif

    menu[0].ExecFun = TA_vBeepTest;
    menu[1].ExecFun = TA_vLCDTest;
    menu[2].ExecFun = TA_vKeyTest;
    menu[3].ExecFun = (void *) TA_ucPowerMenu;
	menu[4].ExecFun = (void *)TA_ucSign;

// #ifdef EPTA9L
//     menu[5].ExecFun = TA_vPowerTest;
// #endif


    ET_ucLoadMenu(menu, (char *) "其它系统模块", sizeof(menu) / sizeof(MENU),
                  ET_MENUITEM);
    ET_vWriteLogToAPlatform("TA_OthersTestMenu");

}

void TA_ucPowerMenu(void)
{
    uchar ucRet;
    MENU menu[2];
    strcpy(menu[0].FunName, "Powercycle测试");
    strcpy(menu[1].FunName, "最大功耗");

    ET_vCls();
    ucRet =
        ET_ucLoadMenu(menu, "电源测试", sizeof(menu) / sizeof(MENU),
                      ET_LISTITEM);
    switch (ucRet)
    {
        case 1:
            ET_vDisplay(2, "请找开发人员提供程序测试");
            ET_uiInkey(0);
            break;
        case 2:
            ET_vDisplay(2, "请使用MTBF程序中");
            ET_vDisplay(3, "并发烤机菜单来测试");
            ET_vDisplay(4, "并发烤机只针对A9L和AND平台机器");
            ET_uiInkey(0);
            break;
        default:
            return;
    }

}


/**********************************************************************
* 函数名称: TA_vModemX900
*   
* 功能描述: 
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:	无
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   liyc        2014-06-28      1.00                创建
**********************************************************************/
void TA_vModemX900(void)
{
    ET_vDisplay(3, "请切换到认证测试程序");
    ET_vDisplay(4, "使用认证测试中的X900来测试");
    ET_uiInkey(0);

}

/**********************************************************************
* 函数名称: TI_ucGetProduct
*   
* 功能描述: 获取产品名
*
* 输入参数: 无
*              
* 输出参数: 无
*
* 返回值:
* ET_SUCCESS	成功
* ET_ERROR		失败
* 其他			产品名宏
*
* 历史纪录
*   修改人      日期            版本号              修改内容
*   linw        2011-07-19      1.00                创建
**********************************************************************/
uchar TI_ucGetProduct(void)
{
    uchar ucRet = ET_SUCCESS;
    char acBuf[128];

#if defined EPTM3 || defined M36
    ET_ConfigInfo tProductConfigInfo;
#elif defined EPTA9L
    ET_ProductInfo tProductInfo;
#endif

#ifdef EPT32
    // 产品类型
    uint uiNumber;
    ET_BASE_CONFIG_ITEM item;
    uchar ucMachineType;
#endif

    tGloabData.ucDual = ET_NO;
    tGloabData.ucIfThermal = ET_NO; // 对打印机型先都设置为NO

    memset(acBuf, 0x00, sizeof(acBuf));

#if defined EPTM3 || defined M36
    ucRet = EA_ucGetConfigInfo(EM_CID_PRODUCT, &tProductConfigInfo);
    if (ET_SUCCESS != ucRet)
    {
        ET_vCls();
        ET_vDisplay(4, "GetConfigInfo ERR:%02x", ucRet);
        ET_uiInkey(0);
        return ET_ERROR;
    }
    if (memcmp(tProductConfigInfo.acInfomation, "E520MIS_A", 9) == 0)   // E520MisPos多应用     by linw
    {
        return E520MIS_A;
    }

    if (memcmp(tProductConfigInfo.acInfomation, "7100V3_A", 8) == 0)    // 7100V3多应用 by linw 
    {
        return V37100_A;
    }

    if (memcmp(tProductConfigInfo.acInfomation, "7100V3", 6) == 0)
    {
        return V37100;
    }

    if (memcmp(tProductConfigInfo.acInfomation, "E330", 4) == 0)
    {
        return E330;
    }

    if (memcmp(tProductConfigInfo.acInfomation, "SPP", 3) == 0)
    {
        return SPP100;
    }

//  if (memcmp(tProductConfigInfo.acInfomation, "M36", 3) == 0)
//     {
//         return M36;
//     }
#endif

#ifdef EPTA9L
    ucRet = EA_ucGetProductInfo(&tProductInfo);
    if (ET_SUCCESS != ucRet)
    {
        ET_vCls();
        ET_vDisplay(4, "GetProductInfo ERR:%02x", ucRet);
        ET_uiInkey(0);
        return ET_ERROR;
    }

    if (memcmp(tProductInfo.acName, "E510", 4) == 0)
    {
        tGloabData.ucDual = ET_YES;
        return E510;
    }

    if (memcmp(tProductInfo.acName, "E520", 4) == 0)
    {
        tGloabData.ucHandlePos = ET_YES;
        TP_vIfThermal();
        if (!tGloabData.ucIfThermal)
        {
            tGloabData.ucDual = ET_YES;
        }
        return E520;
    }

    if (memcmp(tProductInfo.acName, "E530", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        return E530;
    }

    if (memcmp(tProductInfo.acName, "E550", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        return E550;
    }

    if (memcmp(tProductInfo.acName, "ACM8500", 7) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        tGloabData.ucProduct_A01 = ET_YES;
        return ACM8500;
    }

    if (memcmp(tProductInfo.acName, "W280", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        return W280;
    }

    if (memcmp(tProductInfo.acName, "P890", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        return P890;
    }
    if (memcmp(tProductInfo.acName, "E570", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        gtNormalData.ucMode = E570;

        return E570;
    }
    if (memcmp(tProductInfo.acName, "M300", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        gtNormalData.ucMode = M300;

        return M300;
    }

    if (memcmp(tProductInfo.acName, "W280V2", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        gtNormalData.ucMode = W280V2;

        return W280V2;
    }

    if (memcmp(tProductInfo.acName, "P990", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        gtNormalData.ucMode = P990;
        return P990;
    }

    if (memcmp(tProductInfo.acName, "SPP100P", 4) == 0)
    {
        tGloabData.ucIfThermal = ET_YES;
        gtNormalData.ucMode = SPP100P;
        return SPP100P;
    }

#endif

#ifdef EPT32
    // 获取产品类型 (采用判断产品型号方法)  
    ucRet = EA_ucSearchInBaseConfig("产品型号", &uiNumber, &item);
    if (ucRet != EM_SUCCESS)
    {
        ET_vDisplay(4, "SearchInBaseConfig ERR:%02x", ucRet);
        ET_uiInkey(0);
        return ET_ERROR;
    }

    // 产品型号: 0-E05 1-E06 2-TCR200 3-TCR230  4-E03 6-FCM-50 7-F06(FCM-100,7100E) 8-TCR-280 9-M02(3300Plus)
    ucMachineType = item.acDriverIndex[0] - '0';
    switch (ucMachineType)
    {
        case 1:                // 5650
            return EPT32_5650;
        default:
            break;
    }

#endif

    return ERR_PRODUCT;
}